From: kfraser@localhost.localdomain Date: Wed, 2 Aug 2006 14:42:44 +0000 (+0100) Subject: [HVM][VMX] Fix dead loop in PIO handling, introduced in c/s 10894. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15754^2~2 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=148381f98e5aba1871cb9187c86c7d5143138c3a;p=xen.git [HVM][VMX] Fix dead loop in PIO handling, introduced in c/s 10894. RIP update is missed for PIO handling. Signed-off-by: Xin Li --- diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 0eabadb5b7..292fdab4dd 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -1111,9 +1111,10 @@ static void vmx_io_instruction(unsigned long exit_qualification, memcpy(regs, guest_cpu_user_regs(), HVM_CONTEXT_STACK_BYTES); hvm_store_cpu_guest_regs(current, regs, NULL); - __vmread(GUEST_RIP, &eip); - __vmread(GUEST_CS_SELECTOR, &cs); - __vmread(GUEST_RFLAGS, &eflags); + eip = regs->eip; + cs = regs->cs; + eflags = regs->eflags; + vm86 = eflags & X86_EFLAGS_VM ? 1 : 0; HVM_DBG_LOG(DBG_LEVEL_IO, @@ -1165,7 +1166,7 @@ static void vmx_io_instruction(unsigned long exit_qualification, else count = (addr & ~PAGE_MASK) / size; } else - __update_guest_eip(inst_len); + regs->eip += inst_len; send_pio_req(regs, port, count, size, addr, dir, 1); } @@ -1173,7 +1174,7 @@ static void vmx_io_instruction(unsigned long exit_qualification, if (port == 0xe9 && dir == IOREQ_WRITE && size == 1) hvm_print_line(current, regs->eax); /* guest debug output */ - __update_guest_eip(inst_len); + regs->eip += inst_len; send_pio_req(regs, port, 1, size, regs->eax, dir, 0); } }